home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 1999 July / Software of the Month - Ultimate Collection Shareware 263.iso / pc / Xtras / Widget Wizard / Widget Wizard.dir / 00041_Script_Primary Movie Script < prev    next >
Text File  |  1997-05-10  |  16KB  |  446 lines

  1. --Widget Wiz Programmer: Frances Killam, Digital Muse, frances@digmuse.com
  2. --Widget Wiz Producer and Artist: Lisa Coen, SightOn, lisa@sighton.com
  3. --Widget Wiz Executive Producer: Dianna Wynne, Macromedia.
  4. --Special thanks to Irv Kalb and Kevin Mullet for creating Animation Wiz, which I used for inspiration.
  5. --Special thanks to Andy Rose who wrote most of the behaviors for this project.
  6.  
  7.  
  8. global gArtSprite              --sprite channel that button art lives in
  9. global gAltParamList      --current list of alternative art parameters
  10. global gExportList           --list of all castmembers needed for selected button
  11. global gInstructStart       --name of 1st Instruction cast member
  12. global gInstructionsList --text to be stuffed into MIAW Instruct.dir
  13. global gInstructions       --current step being passed to MIAW
  14. global gPasteList           --property list of memberName and script needed for each sprite needed for controller/button/etc...
  15. global gInstructionWindow --MIAW for instructions
  16. global gFirstWindowFlag --boolean flag, False on startMovie, true after MIAW has opened once
  17. global gInstructRect      --current rect location of Instruction Movie
  18. global gInstructStep      --which step are we on? --default, 1
  19. global gInstructTotal     --how many steps are there?
  20. global gWizWindow      --name of the current movie
  21. global gButtonName    --text to be slugged into field "ButtonName"
  22. global LocationList       --List of locations for sprites to be pasted
  23. global gCurrentSprite  -- Sprite number we are currently copying to user's cast
  24. global PasteInfoList     --Info needed to generate score in user's cast
  25. global gSpriteCount     --The total number of sprites used per controller
  26. global gSpritePhrase   --plural or singular version of text : sprite, acc to gSpriteCount
  27. global gUserSelection --User's selection on stage
  28. global gFrameCountMin  --Minimum number of frames we will paste into user's score
  29. global gFrameCountMax  --Maximum number of frames we will paste into user's score
  30. global gStartFrame        --Frame where we will begin recording in user's score
  31. global gStartSprite         --Sprite where we will begin recording in user's score
  32. global gExportScriptList --List of all the scripts exported to user's cast
  33.  
  34. --edited 3/6/97, fmk
  35. --removed redundant script checking, 3/6/97, fmk
  36. --added redundant script checking, but only on a widget by widget basis, 3/12/97, fmk
  37. --added centering code, 3/19/97, fmk
  38. --fixed negative sprite selection bug, 4/14/97, fmk
  39.  
  40. on startMovie
  41.   
  42.   set gArtSprite = 24
  43.   set gFirstWindowFlag = FALSE
  44.   set gWizWindow = the movieName
  45.   set gExportScriptList = [ ]
  46.   
  47.   go to frame 1
  48. end startMovie
  49.  
  50.  
  51.  
  52. on stopMovie
  53.   cursor(-1) 
  54.   forgetInstructions
  55.   if objectP(window gWizWindow) then forget window gWizWindow
  56. end stopMovie
  57.  
  58.  
  59. on closeWindow
  60.   set myName = the movieName
  61.   set offS = offset( ".dir", myName )
  62.   if offS then
  63.     delete char offS to (offS + 4) of myName
  64.   end if
  65.   forget window myName
  66. end closeWindow
  67.  
  68.  
  69. on validateUserSelection
  70.   set gCurrentSprite = 24 --starting sprite to copy
  71.   set gFrameCountMin = 5  
  72.   set gFrameCountMax = 15  
  73.   set mySprite = gCurrentSprite
  74.   set myFlag = TRUE
  75.   set gSpriteCount = 0
  76.   
  77.   --1st, see how many channels we need for our selection
  78.   repeat while myFlag = TRUE
  79.     
  80.     if the type of sprite mySprite = 0 then
  81.       if the type of sprite (mySprite + 1) = 0 then --we're done
  82.         set myFlag = FALSE
  83.         exit repeat
  84.       else --we're not done, we have a valid channel, so count it
  85.         set gSpriteCount = gSpriteCount + 1
  86.         set mySprite = mySprite + 1
  87.       end if
  88.     else -- we have a valid channel, so count it
  89.       set gSpriteCount = gSpriteCount + 1
  90.       set mySprite = mySprite + 1
  91.     end if
  92.   end repeat
  93.   
  94.   if gSpriteCount = 1 then set gSpritePhrase = "channel" 
  95.   else set gSpritePhrase = "channels"
  96.   
  97.   --next, get the user's selection
  98.   tell the stage
  99.     set gUserSelection = the scoreSelection
  100.   end tell
  101.   
  102.   --next check to see if selection is the right size
  103.   if gUserSelection = [] then --has a selection been made?
  104.     
  105.     alert "Please click in the score where you want the widget to begin, then try again.  You need " && gSpriteCount && "sprite"  && gSpritePhrase &&  "and at least" && gFrameCountMin && "frames. "
  106.     abort
  107.   end if
  108.   
  109.   set gStartSprite = getAt(getAt(gUserSelection, 1), 1)
  110.   set myEndSprite = (gStartSprite + gSpriteCount) - 1 
  111.   
  112.   set gStartFrame = getAt(getAt(gUserSelection, 1), 3)
  113.   set myEndFrame = (gStartFrame + gFrameCountMax) - 1
  114.   
  115.   if gStartSprite < 1 then   --does selection start > 0?
  116.     alert "Your selection must start in sprite channel 1 or greater.  Please make a new selection and try again."
  117.     abort
  118.   end if
  119.   
  120.   
  121.   tell the stage --Check the selection, is it empty?
  122.     
  123.     repeat with y = gStartFrame to myEndFrame 
  124.       set myFrameCounter = y - gStartFrame
  125.       go to frame y
  126.       
  127.       repeat with z = gStartSprite to myEndSprite 
  128.         
  129.         if the type of sprite z <> 0 then --we have something in the selection, alert not valid!
  130.           
  131.           --check to see where we are btwn gFrameCountMin and gFrameCountMax
  132.           
  133.           if myFrameCounter < gFrameCountMin then --we don't have enough frames free to write widget.
  134.             
  135.             alert "This selection contains something already.  You need " && gSpriteCount && "sprite" && gSpritePhrase &&  "and at least" && gFrameCountMin && "frames.  Please click in the score where you want the widget to begin, then try again."
  136.             abort
  137.           else --we have enough empty frames to write the widget
  138.             set gFrameCountMax = myFrameCounter 
  139.             set myEndFrame = myFrameCounter - 1 --this should bump us out of frameCount repeat
  140.             exit repeat
  141.           end if
  142.         end if    
  143.       end repeat
  144.     end repeat
  145.     
  146.     go to frame gStartFrame
  147.   end tell
  148.   
  149.   copyButtonPrime
  150. end validateUserSelection
  151.  
  152.  
  153. on copyButtonPrime
  154.   
  155.   cursor 4
  156.   
  157.   --initialize widget for copying
  158.   go the frame + 1
  159.   go the frame - 1
  160.   
  161.   --initialize our vars and lists
  162.   set myMemberNum = 1 --starting castMember to look at for copying
  163.   set PasteInfoList = []
  164.   
  165.   set mySpriteList = [ ]
  166.   
  167.   set myWidgetScriptList = []
  168.   set myAssocPasteList = []
  169.   
  170.   --  set myRedundantFlag = FALSE
  171.   
  172.   repeat with x = gCurrentSprite to ((gCurrentSprite + gSpriteCount) - 1)
  173.     
  174.     --find out what i have to copy... me, myAssociates, myscript
  175.     --set up data list
  176.     set myRecord = [#MemberName:"", #MemberNumber:0, #ScriptName:"", #ScriptNumber:0, #MemberLoc:point(0,0), #MemberRect:rect(0, 0, 0, 0), #Onstage:0]
  177.     
  178.     if the type of sprite x <> 0 then
  179.       set the MemberName of myRecord = the name of member(the member of sprite x)
  180.       set the MemberLoc of myRecord = the loc of sprite x
  181.       set the MemberRect of myRecord = the rect of sprite x
  182.       
  183.       --paste me to user's cast
  184.       copyToClipboard member  (the member of sprite x) 
  185.       
  186.       tell the stage
  187.         --determine where in the user's cast to paste our sprites
  188.         --currently, we paste into castLib 1 ONLY
  189.         repeat while the type of member myMemberNum of castLib 1 <> #empty
  190.           set myMemberNum = myMemberNum + 1
  191.         end repeat
  192.         pasteClipboardInto member myMemberNum of castLib 1
  193.         
  194.         set the MemberNumber of myRecord = the number of member myMemberNum of castLib 1
  195.       end tell
  196.       
  197.       if the scriptNum of sprite x > 0 then         
  198.         
  199.         --paste myAssociates to the user's cast
  200.         set myAssocList = []
  201.         set myAssocList = getAssocMembers (getAt(the scriptInstanceList of sprite x,1))
  202.         
  203.         --check to see if we have already brought over this list of Assoc Members
  204.         set myAssocPasteIndex = 0
  205.         repeat with r = 1 to count(myAssocPasteList)
  206.           if myAssocList = getAt(myAssocPasteList, r) then set myAssocPasteIndex = r
  207.         end repeat
  208.         
  209.         if myAssocPasteIndex = 0 then --we don't have this list of Assoc Members yet, so paste them
  210.           repeat with a = 1 to count(myAssocList )
  211.             copyToClipboard member  (getAt(myAssocList, a))
  212.             
  213.             tell the stage
  214.               --determine where in the user's cast to paste our sprites
  215.               repeat while the type of member myMemberNum of castLib 1 <> #empty
  216.                 set myMemberNum = myMemberNum + 1
  217.               end repeat
  218.               pasteClipboardInto member myMemberNum of castLib 1
  219.             end tell
  220.           end repeat
  221.           
  222.           add myAssocPasteList, myAssocList
  223.         end if
  224.         
  225.         --paste myScript to user's cast
  226.         set myScriptName = the name of member(the scriptNum of sprite x)
  227.         set the ScriptName of myRecord = myScriptName
  228.         
  229.         --check to see if this script is duplicated within this particular widget
  230.         set myWidgetScriptIndex = 0
  231.         repeat with q = 1 to count(myWidgetScriptList)
  232.           if the ScriptName of getAt(myWidgetScriptList, q) = myScriptName then set myWidgetScriptIndex = q
  233.         end repeat
  234.         
  235.         if myWidgetScriptIndex = 0 then --my script is unique to the widget, so copy it to the user's cast
  236.           copyToClipboard member  (the scriptNum of sprite x) 
  237.           
  238.           set myWidgetScriptRecord = [#ScriptName:"", #ScriptNumber:0]
  239.           set the ScriptName of myWidgetScriptRecord = myScriptName
  240.           
  241.           
  242.           tell the stage
  243.             --determine where in the user's cast to paste our sprites
  244.             repeat while the type of member myMemberNum of castLib 1 <> #empty
  245.               set myMemberNum = myMemberNum + 1
  246.             end repeat
  247.             pasteClipboardInto member myMemberNum of castLib 1
  248.             
  249.             set myScriptNumber = the number of member myMemberNum of castLib 1
  250.             
  251.             set the ScriptNumber of myRecord = myScriptNumber
  252.             set the ScriptNumber of myWidgetScriptRecord = myScriptNumber
  253.             
  254.           end tell
  255.           
  256.           add myWidgetScriptList, myWidgetScriptRecord
  257.           
  258.         else --another sprite in my widget already uses this script, so we don't need to copy it again.  Use the  script we already have for the current sprite.
  259.           
  260.           set the ScriptNumber of myRecord = the ScriptNumber of getAt(myWidgetScriptList, myWidgetScriptIndex)
  261.         end if
  262.         
  263.       end if
  264.     end if
  265.     
  266.     add PasteInfoList, myRecord
  267.     
  268.   end repeat
  269.   
  270.   --now check for the frame script
  271.   set myFrameScriptName = "loop current frame"
  272.   
  273.   copyToClipboard member  myFrameScriptName
  274.   
  275.   tell the stage
  276.     --determine where in the user's cast to paste our sprites
  277.     repeat while the type of member myMemberNum of castLib 1 <> #empty
  278.       set myMemberNum = myMemberNum + 1
  279.     end repeat
  280.     pasteClipboardInto member myMemberNum of castLib 1
  281.     
  282.     set myFrameScriptNum = the number of member myMemberNum of castLib 1
  283.     set myScriptRecord = [#ScriptName: myFrameScriptName, #ScriptNumber: myFrameScriptNum]
  284.     add gExportScriptList, myScriptRecord
  285.   end tell
  286.   
  287.   --  put "PasteInfoList = " & PasteInfoList --DEBUG
  288.   --  put "gExportScriptList = " & gExportScriptList --DEBUG
  289.   
  290.   -- Determine the bounding rect for Widget on Wizard stage
  291.   set myTestRect = rect(1, 1, 496, 342) 
  292.   set myPlacementFlag = FALSE
  293.   
  294.   repeat with s = 1 to count(PasteInfoList)
  295.     set myCurrentRect = the MemberRect of getAt(PasteInfoList, s)
  296.     --is this sprite on stage?
  297.     if union(myTestRect, myCurrentRect) = myTestRect then --we're on stage
  298.       if myPlacementFlag = FALSE then 
  299.         set myPlacementFlag = TRUE
  300.         set myBoundingRect = myCurrentRect
  301.       else
  302.         set myBoundingRect = union(myBoundingRect, myCurrentRect)
  303.       end if
  304.       
  305.       set the Onstage of getAt(PasteInfoList, s) = 1
  306.       
  307.     end if      
  308.   end repeat
  309.   
  310.   
  311.   -- Determine location for bounding rect on user's stage
  312.   set myBoundingWidth = getAt(myBoundingRect, 3) - getAt(myBoundingRect, 1)
  313.   set myBoundingHeight = getAt(myBoundingRect, 4) - getAt(myBoundingRect, 2)
  314.   tell the stage
  315.     set myStageWidth = the stageRight - the stageLeft
  316.     set myStageHeight = the stageBottom - the stageTop
  317.   end tell
  318.   --figure out the starting point of the rect we will paste into on the user's stage
  319.   set myStartH = (myStageWidth - myBoundingWidth) / 2
  320.   set myStartV = (myStageHeight - myBoundingHeight) / 2
  321.   --figure out the starting point of our Bounding rect
  322.   set myBoundingH = getAt(myBoundingRect, 1)
  323.   set myBoundingV = getAt(myBoundingRect, 2)
  324.   
  325.   --next, use score generation to place required castMembers on user's score
  326.   
  327.   tell the stage
  328.     
  329.     beginRecording
  330.       
  331.       repeat with y = gStartFrame to (gStartFrame + gFrameCountMax) - 1 --do this for each frame
  332.         
  333.         set myListCount = 1
  334.         
  335.         go to frame y
  336.         
  337.         if the frame = (gStartFrame + gFrameCountMax) - 1 then      --add the frameScript
  338.           set   the frameScript = myFrameScriptNum
  339.         end if
  340.         
  341.         repeat with z = gStartSprite to (gStartSprite + gSpriteCount) - 1
  342.           
  343.           set myRecord = getAt(PasteInfoList, myListCount)
  344.           set myListCount = myListCount + 1
  345.           
  346.           --validate record as having data or not
  347.           if the MemberNumber of myRecord > 0 then
  348.             
  349.             set the member of sprite z = the MemberNumber of myRecord
  350.             
  351.             if the Onstage of myRecord = 0 then
  352.               set the loc of sprite z = the MemberLoc of myRecord
  353.             else
  354.               set myMemberH = getAt(the MemberLoc of myRecord, 1)
  355.               set myMemberV = getAt(the MemberLoc of myRecord, 2)
  356.               set myPasteHdif = myMemberH - myBoundingH
  357.               set myPasteVdif = myMemberV - myBoundingV
  358.               set the loc of sprite z = point(myStartH + myPasteHdif, myStartV + myPasteVdif)
  359.             end if
  360.             
  361.             if the ScriptNumber of myRecord <> 0 then set the scriptNum of sprite z = member (the ScriptNumber of myRecord)
  362.             
  363.             set the tweened of sprite z to TRUE
  364.             
  365.           end if
  366.           
  367.         end repeat
  368.         
  369.       end repeat
  370.       
  371.     endRecording
  372.   end tell
  373.   
  374.   
  375.   beep(2) --DEBUG
  376.   
  377.   cursor -1
  378.   
  379.   --open instruction window
  380.   openInstructionWindow
  381. end copyButtonPrime
  382.  
  383.  
  384.  
  385. on setWindowRect
  386.   if gFirstWindowFlag = FALSE then
  387.     set myLeft = the stageLeft + 50
  388.     set myTop = the stageTop + 50
  389.     -- lisa change window size 2/26/97
  390.     set myWidth = 160
  391.     set myHeight = 400 -- + 15 --for titleBar
  392.     set gInstructRect = rect(myLeft, myTop, myLeft + myWidth, myTop + myHeight)
  393.     
  394.     set gFirstWindowFlag = TRUE
  395.   end if
  396. end setWindowRect
  397.  
  398.  
  399. on openInstructionWindow
  400.   if objectP(gInstructionWindow) then forgetInstructions --forget gInstructionWindow
  401.   
  402.   setWindowRect
  403.   
  404.   set gInstructionWindow = window "Instructions"
  405.   set the rect of gInstructionWindow = gInstructRect
  406.   set the fileName of gInstructionWindow = the pathName & "-Instrct.dir"
  407.   set the titleVisible of gInstructionWindow = FALSE 
  408.   set the windowType of gInstructionWindow = 49 --palette style
  409.   open gInstructionWindow
  410.   
  411.   resetInstructText
  412. end openInstructionWindow
  413.  
  414.  
  415.  
  416.  
  417. on resetInstructText
  418.   tell gInstructionWindow
  419.     displayNewText
  420.   end tell 
  421. end resetInstructText
  422.  
  423.  
  424. on forgetInstructions
  425.   if objectP(gInstructionWindow) then
  426.     set gFirstWindowFlag = TRUE
  427.     set gInstructRect = the rect of gInstructionWindow
  428.     forget gInstructionWindow
  429.   end if
  430. end forgetInstructions
  431.  
  432.  
  433.  
  434.  
  435. on initElements
  436.   set gInstructStart = the frameLabel & "-1"
  437.   if objectP(gInstructionWindow) then resetInstructText
  438. end initElements
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.